test

10.8 问题排查

如果Memleak连接不上JVM的话,可能是因为Memleak需要使用一个额外的端口。与其他JRockit Mission Control中的工具一样,Memleak也是通过JMX来完成工作的,因此需要一个运行在JVM内部分的 MLS(MemLeak Server),在启动之后,客户端就不再使用JMX了,而是使用私有协议MLP(Memory Leak Protocol)来进行通信。

MLS是内建于JRockit中的服务器,原本是希望可以在Java堆之外运行MLS,以便在JVM在发生OutOfMemoryError错误时,可以将JVM挂起,并启动MLS,因此就想在JVM加入一个特殊的标记位。但可惜的是,这点一直没有实现。

在JRockit Mission Control中可以设置MLS所使用的具体端口,如下图所示:

Figure 10-22

此外,还需要注意的是:

  • 任意时间,只能有一个客户端连接到MLS
  • 当一个客户端断开时,MLS会自动关闭。